import java.lang.reflect.Proxy;

/**
 * 计算器测试类
 */
public class CalculatorTest {
    public static void main(String[] args) {
        // 1.创建目标对象
        Calculator calculator = new CalculatorImpl();

        // 2.创建调用处理器对象
        YiXinZhiProxyHandler handler = new YiXinZhiProxyHandler(calculator);

        // 3.动态生成代理对象
        Calculator proxy = (Calculator) Proxy.newProxyInstance(
                CalculatorImpl.class.getClassLoader(),
                CalculatorImpl.class.getInterfaces(),
                handler);

        // 4.客户端通过代理对象调用方法
        // 本次调用将自动被代理处理器的invoke方法接收
        int result = 0;

        System.out.println("\n========== 测试用例1：参数包含负数 ==========");
        result = proxy.add(1111111111, -1);
        System.out.println("The result is " + result);

        System.out.println("\n========== 测试用例2：结果超过int最大值 ==========");
        result = proxy.add(1111111111, 2000000000);
        System.out.println("The result is " + result);

        // 此处测试数据为 第一个参数个人学号前8位 第二个参数 个人学号后4位
        System.out.println("\n========== 测试用例3：正常计算（学号测试） ==========");
        result = proxy.add(20241167, 1429);
        System.out.println("The result is " + result);

        System.out.println("\n========== 测试用例4：边界值测试 ==========");
        result = proxy.add(0, 0);
        System.out.println("The result is " + result);

        result = proxy.add(Integer.MAX_VALUE, 0);
        System.out.println("The result is " + result);

        System.out.println("\n========== 统计信息 ==========");
        System.out.println(handler.getStatistics());
    }
}
